@rsc-labs/medusa-store-analytics
Version:
Get analytics data about your store
53 lines (52 loc) • 2.87 kB
JavaScript
;
/*
* Copyright 2024 RSC-Labs, https://rsoftcon.com/
*
* MIT License
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.GET = void 0;
const medusa_1 = require("@medusajs/medusa");
const utils_1 = require("@medusajs/utils");
const GET = async (req, res) => {
const kind = req.params.kind;
const dateRangeFrom = req.query.dateRangeFrom;
const dateRangeTo = req.query.dateRangeTo;
const dateRangeFromCompareTo = req.query.dateRangeFromCompareTo;
const dateRangeToCompareTo = req.query.dateRangeToCompareTo;
const orderStatusesFromQuery = req.query.orderStatuses;
const orderStatuses = orderStatusesFromQuery !== undefined ?
orderStatusesFromQuery.map(status => medusa_1.OrderStatus[status.toUpperCase()]).filter(orderStatus => orderStatus !== undefined) : [];
let result;
const productsAnalyticsService = req.scope.resolve('productsAnalyticsService');
try {
switch (kind) {
case 'popularity-by-count':
result = await productsAnalyticsService.getTopVariantsByCount(orderStatuses, dateRangeFrom ? new Date(Number(dateRangeFrom)) : undefined, dateRangeTo ? new Date(Number(dateRangeTo)) : undefined, dateRangeFromCompareTo ? new Date(Number(dateRangeFromCompareTo)) : undefined, dateRangeToCompareTo ? new Date(Number(dateRangeToCompareTo)) : undefined);
break;
case 'returned-by-count':
result = await productsAnalyticsService.getTopReturnedVariantsByCount(dateRangeFrom ? new Date(Number(dateRangeFrom)) : undefined, dateRangeTo ? new Date(Number(dateRangeTo)) : undefined);
break;
case 'sold-count':
result = await productsAnalyticsService.getProductsSoldCount(orderStatuses, dateRangeFrom ? new Date(Number(dateRangeFrom)) : undefined, dateRangeTo ? new Date(Number(dateRangeTo)) : undefined, dateRangeFromCompareTo ? new Date(Number(dateRangeFromCompareTo)) : undefined, dateRangeToCompareTo ? new Date(Number(dateRangeToCompareTo)) : undefined);
break;
case 'out-of-the-stock-variants':
const limit = req.query.limit;
result = await productsAnalyticsService.getOutOfTheStockVariants(limit ? parseInt(limit) : undefined);
break;
}
res.status(200).json({
analytics: result
});
}
catch (error) {
throw new utils_1.MedusaError(utils_1.MedusaErrorTypes.DB_ERROR, error.message);
}
};
exports.GET = GET;